var express = require('express');
var router = express.Router();

var User = require('../models/User');
var Category = require('../models/Category');
var Content = require('../models/Content');

router.use(function (req, res, next) {
    if(!req.userInfo.isAdmin){
        // 如果当前用户不是管理员
        res.send('对不起，只有管理员才可以进入后台管理');
        return;
    }
    next();
})

router.get('/', function (req, res) {
    res.render('admin/index', {
        userInfo: req.userInfo
    });
});

router.get('/user', function (req, res) {
    /*
    * 从数据库中读取所有的用户数据
    *
    * limit(Number): 限制获取的数据条数
    *
    * skip(Number) : 忽略数据的条数
    * */
    var page = Number(req.query.page || 1);
    var limit = 10;

    User.count().then(function(count){

        var totalPage = Math.ceil(count/limit);
        page = Math.min(page, totalPage);
        page = Math.max(page, 1);
        var skip = (page - 1)*limit;

        User.find().skip(skip).limit(limit).then(function (users) {
            res.render('admin/user_index',{
                userInfo: req.userInfo,
                users: users,
                page: page,
                totalPage: totalPage,
                limit: limit,
                count: count
            });
        });

    })

})

/*
* 分类首页
* */
router.get('/category', function(req, res){

    Category.count().then(function (count) {
        /*
        * 1: 升序
        * -1：降序
        * */
        Category.find().sort({_id:-1}).then(function (categories) {
            res.render('admin/category_index', {
                userInfo: req.userInfo,
                categories: categories,
                count: count
            });
        });

    });

});

/*
* 分类的添加
* */
router.get('/category/add', function(req, res){

    res.render('admin/category_add', {
        userInfo: req.userInfo
    });

});

/*
* 新加分类的保存
* */
router.post('/category/add', function (req, res) {

    var name = req.body.name || '';
    if(name == ''){
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '名称不能为空'
        });
        return;
    }
    
    // 数据库中是否已经存在该分类名
    Category.findOne({
        name: name
    }).then(function (rs) {
        if(rs){
            // 数据库已经存在该分类
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '已存在该分类'
            });
            return Promise.reject();
        }else{
            // 数据库不存在该分类
            return new Category({
                name: name
            }).save();
        }
    }).then(function (newCategory) {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '分类保存成功',
            url: '/admin/category'
        })
    })

});

// 分类修改
router.get('/category/edit', function (req, res) {
   // 获取要修改的分类的信息，并且用表单的形式展现出来
    var id = req.query.id || '';
    // 获取要修改的分类信息
    Category.findOne({
        _id: id
    }).then(function (category) {
        if(!category){
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '分类信息不存在'
            });
            return Promise.reject();
        } else {
            res.render('admin/category_edit', {
                userInfo: req.userInfo,
                category: category
            });
        }
    })
});

// 分类的修改保存
router.post('/category/edit', function (req, res) {
    // 获取要修改的分类的信息，并且用表单的形式展现出来
    var id = req.query.id || '';
    // 获取post传过来的名称
    var name = req.body.name || '';

    // 获取要修改的分类信息
    Category.findOne({
        _id: id
    }).then(function (category) {
        if(!category){
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '分类信息不存在'
            });
            return Promise.reject();
        } else {
            // 当新名称为空
            if(!name){
                res.render('admin/error', {
                    userInfo: req.userInfo,
                    message: '没有填写新名称'
                });
                return Promise.reject();
            }
            // 当用户没有做任何修改
            if(name == category.name){
                res.render('admin/error', {
                    userInfo: req.userInfo,
                    message: '名称未修改'
                });
                return Promise.reject();
            }
            // 要修改的分类名称是否已存在
            return Category.findOne({
                id: {$ne: id},
                name: name
            })
        }
    }).then(function (sameCategory) {
        if(sameCategory){
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '数据库中已存在同名分类'
            });
            return Promise.reject();
        } else {
            return Category.update({
                _id: id
            }, {
                name: name
            });
        }
    }).then(function () {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '修改成功',
            url: '/admin/category'
        });
    })

})

// 分类删除
router.get('/category/delete', function (req, res) {
    // 获取要删除的分类id
    var id = req.query.id || '';

    Category.remove({
        _id: id
    }).then(function () {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '删除成功',
            url: '/admin/category'
        });
    });
});

/*
* 内容首页
* */
router.get('/content', function (req, res) {
    /*
    * 从数据库中读取所有的文章数据
    * limit(Number): 限制获取的数据条数
    * skip(Number) : 忽略数据的条数
    * */
    var page = Number(req.query.page || 1);
    var limit = 10;

    Content.count().then(function (count) {

        var totalPage = Math.ceil(count/limit);
        page = Math.min(page, totalPage);
        page = Math.max(page, 1);
        var skip = (page - 1)*limit;

        Content.find().sort({_id:-1}).skip(skip).limit(limit).populate(['category','user']).then(function (contents) {
            res.render('admin/content_index', {
                userInfo: req.userInfo,
                contents: contents,
                page: page,
                totalPage: totalPage,
                limit: limit,
                count: count
            });
        });

    });
});

/*
* 内容添加页
* */
router.get('/content/add', function (req, res) {
    
    Category.find().then(function (categories) {

        res.render('admin/content_add', {
            userInfo: req.userInfo,
            categories: categories
        });
    })
});
//文章内容保存
router.post('/content/add', function (req, res) {

    if( req.body.category == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '文章分类不能为空'
        })
        return;
    }

    if( req.body.title == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '文章标题不能为空'
        })
        return;
    }

    if( req.body.content == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '文章内容不能为空'
        })
        return;
    }

    // 数据库中是否已经存在该文章标题
    Content.findOne({
        title: req.body.title
    }).then(function (rs) {
        if(rs){
            // 数据库已经存在该文章标题
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '文章标题已存在'
            });
            return Promise.reject();
        }else{
            // 数据库不存在该文章标题
            return new Content({
                category: req.body.category,
                title: req.body.title,
                user: req.userInfo.uid,
                addTime: new Date(),
                description: req.body.description,
                content: req.body.content
            }).save();
        }
    }).then(function (newCategory) {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '文章保存成功',
            url: '/admin/content'
        })
    })

});
// 文章删除
router.get('/content/delete', function (req, res) {
    // 获取要删除的文章id
    var id = req.query.id || '';

    Content.remove({
        _id: id
    }).then(function () {
        res.render('admin/success', {
            userInfo: req.userInfo,
            message: '删除成功',
            url: '/admin/content'
        });
    });
});

// 文章修改
router.get('/content/edit', function (req, res) {
    // 获取要修改的文章的信息，并且用表单的形式展现出来
    var id = req.query.id || '';
    // 获取要修改的文章信息

    var categories = [];
    Category.find().then(function (rs) {
        categories = rs;
        return Content.findOne({
            _id: id
        }).populate('category');
    }).then(function (content) {
        if(!content){
            res.render('admin/error', {
                userInfo: req.userInfo,
                message: '文章信息不存在'
            });
            return Promise.reject();
        } else {
            res.render('admin/content_edit', {
                userInfo: req.userInfo,
                content: content,
                categories: categories
            });
        }
    })
});

// 文章的修改保存
router.post('/content/edit', function (req, res) {
    // 获取要修改的文章的信息，并且用表单的形式展现出来
    var id = req.query.id || '';

    if( req.body.title == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '文章标题不能为空'
        })
        return;
    }

    if( req.body.content == '') {
        res.render('admin/error', {
            userInfo: req.userInfo,
            message: '文章内容不能为空'
        })
        return;
    }

    Content.update({
        _id: id
    }, {
        category: req.body.category,
        title: req.body.title,
        description: req.body.description,
        content: req.body.content
    }).then(function () {
        res.render('admin/success',{
            userInfo: req.userInfo,
            url: '/admin/content/edit?id=' + id,
            message: '修改成功'
        })
    });

})

module.exports = router;